package com.crm.system.service.customerManager;

import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.common.Dictionary;
import com.crm.model.entity.customerManager.*;
import com.crm.model.qo.customerManager.CustomerPoolAddQO;
import com.crm.model.qo.customerManager.CustomerPoolQO;
import com.crm.model.vo.cluePoolManager.UserCompanyVO;
import com.crm.model.vo.customerManager.*;

import java.util.List;


/**
 * @ Author ：pym
 * @ Date   ：2021/1/15 10:09
 */
public interface CustomerPoolService {

    /**
     * 管理模块 -- 客户公海列表
     * @param pageIndex
     * @param pageSize
     * @param customerPoolQO
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<CustomerPoolVO> selectCustomerPoolVOList(Integer pageIndex, Integer pageSize, CustomerPoolQO customerPoolQO, String sortName, String sortOrder);

    /**
     *根据客户id查询客户详细信息
     * @param customer_id 客户id
     * @return
     */
    Customer customerHighSeasDetail(String customer_id);

    /**
     *根据客户id查询公司信息
     * @param customer_id 客户id
     * @return
     */
    CustomerCompanyInfo getCompanyInfo(String customer_id);

    /**
     * 根据客户id查询公司联系人信息
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customer_id 客户id
     * @param isSeniorExecutive 类型是否高管   0高管  1非高管
     * @param abolishState 废止状态  1不查询废止的 2查询废止的
     * @return
     */
    DhPageInfo<CustomerContactPerson> customerContactPersonList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customer_id, int isSeniorExecutive,int abolishState);

    /**
     * 根据客户id查询联系人列表
     * @param customerId
     * @return
     */
    List<CustomerContactPerson> selectContactPersonListByCustomerId( String customerId);

    /**
     * 管理模块-添加客户池索
     * @param customerPoolAddQO
     * @return
     */
    Boolean addCustomerPool(CustomerPoolAddQO customerPoolAddQO);

    /**
     * 管理模块-客户池开启/停用
     * @param customerPoolId  ---客户池主键
     * @param poolState       ---客户池开启/停用状态
     * @return
     */
    Boolean updatePoolStateById(String customerPoolId,String poolState);

    /**
     * 客户详情-新增联系人 同时新增客户下联系人和联系人大表
     * @param customerContactVO 联系人实体
     * @return
     */
    Boolean addCustomerContactPerson(CustomerContactVO customerContactVO);

    /**
     * 根据联系人id,回显联系人信息
     * @param customerContactPersonId 客户下联系人id
     * @return
     */
    CustomerContactPerson getCustomerContactPerson(String customerContactPersonId);

    /**
     * 客户详情-修改联系人 一起修改客户下联系人和联系人大表
     * @param customerContactVO 客户下联系人id
     * @return
     */
    Boolean updateCustomerContactPerson(CustomerContactVO customerContactVO);

    /**
     * 根据客户id查询公司修改记录
     * @param pageIndex 页码
     * @param pageSize 分页大小
     * @param sortName 排序列名字
     * @param sortOrder 排序规则(asc/desc)
     * @param customerId 客户id
     * @return
     */
    DhPageInfo<ModificationRecordVO> modificationRecordList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String customerId);

    /**
     * 管理模块-客户池修改
     * @param customerPoolAddQO
     * @return
     */
    int editCustomerPoolById(CustomerPoolAddQO customerPoolAddQO);

    /**
     * 管理模块-删除客户池
     * @param customerPoolId 客户池id
     * @return
     */
    int deleteCustomerPoolById(String customerPoolId);

    /**
     * 客户详情--联系人 开启/废止联系人
     * @param fzCustomerContactVO 废止联系人实体
     * @return
     */
    Boolean updateAbolishStateById(FzCustomerContactVO fzCustomerContactVO);

    /**
     * 客户-修改客户
     * @param customer 客户实体
     * @return
     */
    Boolean updateCustomer(Customer customer);

    /**
     * 根据客户id查询客户详情
     * @param customerId 客户id
     * @return
     */
    CustomerVO selectByCustomerId(String customerId);

    /**
     * 客户详情下拉框的文本
     * @param typeCode  大类
     * @param dictCode  小类
     * @return
     */
    Dictionary selectDictionaryByOne(String typeCode, String dictCode);

    /**
     * 根据客户池ID查询公司
     * @param customerPoolId  ---客户池ID
     * @return
     */
    List<UserCompanyVO> selectDistributeCompany(String customerPoolId);

    /**
     * 根据用户名查询用户信息及所在公司信息(全国公有池、分公司公有池-分配-按人员姓名模糊查找)
     * @param userName ---用户名
     * @return
     */
    List<UserCompanyVO> selectUserAndCompany(String userName);

    /**
     * 查询分公司公有池的用户
     * @param companyIds ---公司ID集合
     * @param userName ---用户名
     * @return
     */
    List<UserCompanyVO> selectUserByPoolPermission(List<String> companyIds,String userName);

    /**
     * 查询启用的客户池名称
     * @return
     */
    List<CustomerPool> selectEnableCustomerPoolName();

    /**
     * 客户-修改客户图片和标签
     * @param customer 客户实体
     * @return
     */
    Boolean updateCustomerImgAndTag(Customer customer);
}
